package com.example.demo.redis;

public class ReentrantLockDemo {

    public static void main(String[] args) {
        // 创建一个示例对象
        ReentrantObject reentrantObject = new ReentrantObject();

        // 启动一个线程
        new Thread(() -> {
            try {
                reentrantObject.performTask();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

class ReentrantObject {
    // 定义一个可重入锁
    private final Object lock = new Object();

    public void performTask() throws InterruptedException {
        // 第一次获取锁
        synchronized (lock) {
            System.out.println(Thread.currentThread().getName() + " 第一次获取锁");

            // 在持有锁的情况下再次获取锁
            synchronized (lock) {
                System.out.println(Thread.currentThread().getName() + " 第二次获取锁");
                // 执行任务，模拟工作
                Thread.sleep(1000);
            }
        }

        // 释放第一次获取的锁
        System.out.println(Thread.currentThread().getName() + " 第一次释放锁");
    }
}
